/**
 * @file string1.h
 * @author your name (you@domain.com)
 * @brief 
 * 练习类经常需要自定义的方法：
 * 构造方法，析构方法，赋值方法，深拷贝方法
 * 操作符重载：=，<<，>>
 * 静态方法，静态属性
 * @version 0.1
 * @date 2022-03-21
 * 
 * @copyright Copyright (c) 2022
 * 
 */
#include <iostream>
static int a = 10;
class String
{
    private:
        char *str;
        static int str_num;
        //!! 只有const类型的静态属性才允许在声明的时候直接初始化
        static const int C_IPUT_LIMIT = 20;
        int len;
    public:
        String();
        String(const char * aStr);
        String(const String & aStr);
        ~String();
        int howManay();

        // 操作符重载
        char & operator[](int index);
        const char & operator[](const int index) const;
        String & operator=(String &aString);
        String & operator=(const char *aStr);

        // 友元函数
        friend std::ostream & operator<< (std::ostream &os, String &aStr);
        friend void operator>> (std::istream &is, String &aStr);

};
